<?php

class PlanificacionsController extends AppController {

    var $name = 'Planificacions';
    var $layout = "ajax";
    var $components = array('Interfaz', 'Vista',);
    var $helpers = array('Interfaz', 'Vista', 'Ayuda',);
    var $uses = array('Planificacion', 'PlanificacionDetalle', 'Almacen', 'Afiliado', 'Producto', 'Viaje', 'ViajeConcepto', 'Chofer', 'Concepto', );

    public function beforeFilter() {
        $this->validar();
    }

    function index($busq = null) {
        $this->permisos_menu_individual('planificaciones');
        $this->set('busq', $busq);
        $condiciones['Planificacion.id >'] = '0';
        $condiciones['Planificacion.estatus !='] = 0;
        $filtros = '';
        if(!empty($this->request->data))if(!empty($this->request->data)){
            $filtros = $this->request->data;
            extract($filtros);
        }
        if(!empty($filtros) && isset($vent_filtro)){
            $this->set('opciones', $this->serializador($filtros, 2));
            if(!empty($codigo))
                $condiciones['Planificacion.codigo ILIKE'] = "%$codigo%";
            if(!empty($descripcion))
                $condiciones['Planificacion.descripcion ILIKE'] = "%$descripcion%";
            if(!empty($estatus))
                $condiciones['Planificacion.estatus'] = $estatus;
            if(!empty($cantidad))
                $condiciones['OR'] = array('Planificacion.cant_lunes' => $cantidad,
                                            'Planificacion.cant_martes' => $cantidad,
                                            'Planificacion.cant_miercoles' => $cantidad,
                                            'Planificacion.cant_jueves' => $cantidad,
                                            'Planificacion.cant_viernes' => $cantidad);
        }
        $data = $this->Planificacion->find('all', array('conditions' => $condiciones, 'order' => 'Planificacion.codigo', 'limit' => MAX_PAGI));
        $mostrar = (count($data) > MAX_PAGI) ? MAX_PAGI : count($data);
        $this->set('data', $data);
        $this->Vista->title("Listado de Planificaciones Encontradas (Mostrando $mostrar de " . count($data) . " Registros Encontrados)");
        if(isset($vent_filtro))
            $this->Vista->cerrar_ventana($vent_filtro);
        //$this->log(1);
    }

    public function nuevo() {
        $this->permisos_accion_individual('planificaciones', 'nuevo');
        $this->set('listaEstados', $this->listaEstado());
        $siguiente = $this->Planificacion->query("SELECT CASE WHEN (COUNT(id) = 0) THEN EXTRACT(WEEK FROM NOW()) ELSE MAX(RIGHT(codigo, '2')::int) + 1 END AS total FROM planificacions WHERE estatus IN (1, 2) LIMIT 1");
        $siguiente = date('Y') . "-" . str_pad($siguiente[0][0]['total'], 2, '0', STR_PAD_LEFT);
        $this->set('siguiente', $siguiente);
    }

    public function guardar() {
        $this->permisos_accion_individual('planificaciones', 'nuevo');
        $data = $this->request->data;
        if (!$this->Vista->empyt($data, array('descripcion'))) {
            extract($data);
            if (!$this->Vista->verifica('Planificacion', 'codigo', $codigo, 'codigo')) {
                $this->Planificacion->query('BEGIN WORK');
                $data['Planificacion']['codigo'] = $codigo;
                $data['Planificacion']['estatus'] = $estatus;
                if (isset($descripcion))
                    $data['Planificacion']['descripcion'] = $this->Interfaz->mayuscula($descripcion);
                $data['Planificacion']['cant_lunes'] = $cant_lunes;
                $data['Planificacion']['cant_martes'] = $cant_martes;
                $data['Planificacion']['cant_miercoles'] = $cant_miercoles;
                $data['Planificacion']['cant_jueves'] = $cant_jueves;
                $data['Planificacion']['cant_viernes'] = $cant_viernes;

                if ($this->Planificacion->save($data)) {
                    $this->Planificacion->query('COMMIT');
                    $this->Vista->mensaje("Guardado Exitosamente", 'EXITO');
                    $this->Vista->cerrar_ventana($vent_nuevo_plan);
                    //$this->log('imprimir');
                } else {
                    $this->Planificacion->query('ROLLBACK');
                    $this->Vista->mensaje("Ocurrio un error Guardando", 'ERROR', 'codigo');
                }
            } else
                $this->Vista->mensaje("C&oacute;digo duplicado", 'ERROR');
        }
        else
            $this->Vista->mensaje("Faltan campos requeridos", 'ERROR');
        $this->index();
        $this->render('index');
    }

    public function modificar($id = null) {
        $this->permisos_opcion_individual('planificaciones', 'estatus', 'modificar');
        $data = $this->request->data;
        if (!empty($data)) {
            if (!$this->Vista->empyt($data, array('descripcion'))) {
                extract($data);
                $id = $this->Interfaz->id($id_planificacion);
                if (!$this->Vista->verifica('Planificacion', 'codigo', $codigo, 'codigo', $id)) {
                    $this->Planificacion->query('BEGIN WORK');
                    $data['Planificacion']['id'] = $id;
                    $data['Planificacion']['codigo'] = $codigo;
                    $data['Planificacion']['estatus'] = $estatus;
                    if (isset($descripcion))
                        $data['Planificacion']['descripcion'] = $this->Interfaz->mayuscula($descripcion);
                    $data['Planificacion']['cant_lunes'] = $cant_lunes;
                    $data['Planificacion']['cant_martes'] = $cant_martes;
                    $data['Planificacion']['cant_miercoles'] = $cant_miercoles;
                    $data['Planificacion']['cant_jueves'] = $cant_jueves;
                    $data['Planificacion']['cant_viernes'] = $cant_viernes;

                    if ($this->Planificacion->save($data)) {
                        $this->Planificacion->query('COMMIT');
                        $this->Vista->mensaje("Guardado Exitosamente", 'EXITO');
                        $this->Vista->cerrar_ventana($vent_nuevo_plan);
                        //$this->log('imprimir');
                    } else {
                        $this->Planificacion->query('ROLLBACK');
                        $this->Vista->mensaje("Ocurrio un error Guardando", 'ERROR', 'codigo');
                    }
                } else
                    $this->Vista->mensaje("C&oacute;digo duplicado", 'ERROR');
            }
            else
                $this->Vista->mensaje("Faltan campos requeridos", 'ERROR');
            $this->index();
            $this->render('index');
        } else {
            $id = $this->Interfaz->id($id);
            if (is_numeric($id)) {
                $this->set('listaEstados', $this->listaEstado());
                $resultado = $this->Planificacion->find('first', array('conditions' => array('Planificacion.id' => $id)));
                $this->set('data', $resultado);
            } else {
                $this->Vista->mensaje("Planificaci&oacute;n Inv&aacute;lida", 'ERROR');
                $this->render("../" . PRINCIPAL . "/mensajes");
            }
        }
    }

    public function eliminar($id = null) {
        $this->permisos_opcion_individual('planificaciones', 'estatus', 'eliminar');
        $id = $this->Interfaz->id($id);
        if (is_numeric($id)) {
            $total = $this->Planificacion->find('count', array('conditions' => array("Planificacion.estatus" => 0)));
            $this->Planificacion->query('BEGIN WORK');
            $data['Planificacion']['id'] = $id;
            $data['Planificacion']['codigo'] = ++$total;
            $data['Planificacion']['estatus'] = 0;
            if ($this->Planificacion->save($data)) {
                $this->Planificacion->query('COMMIT');
                $this->Vista->mensaje("Eliminado Exitosamente", 'EXITO');
                //$this->log('imprimir');
            } else {
                $this->Planificacion->query('ROLLBACK');
                $this->Vista->mensaje("Ocurrio un error Eliminando", 'ERROR');
            }
        } else {
            $this->Vista->mensaje("Planificaci&oacute;n Inv&aacute;lida", 'ERROR');
            $this->render("../" . PRINCIPAL . "/mensajes");
        }
        $this->index();
        $this->render('index');
    }
    
    public function filtro() {
        $this->permisos_accion_individual('productos', 'filtro');
        $this->set('listaEstados', $this->listaEstado());
    }
    
    public function reporte_excel($formato = 1, $b = 1, $busq = null){
        $condiciones['Planificacion.id >'] = '0';
        $condiciones['Planificacion.estatus !='] = 0;
        $busq = (strpos($busq, 'menuadmin') === false) ? $busq : '';
        if(!empty($busq)){
            if($b == 2){
                $dataSerializada = $this->serializador($busq, 1); //1 convierte la cadena serializada en un arreglo
                if(is_array($dataSerializada)){
                    extract($dataSerializada);
                    if(!empty($codigo))
                        $condiciones['Planificacion.codigo ILIKE'] = "%$codigo%";
                    if(!empty($descripcion))
                        $condiciones['Planificacion.descripcion ILIKE'] = "%$descripcion%";
                    if(!empty($estatus))
                        $condiciones['Planificacion.estatus'] = $estatus;
                    if(!empty($cantidad))
                        $condiciones['OR'] = array('Planificacion.cant_lunes' => $cantidad,
                                                    'Planificacion.cant_martes' => $cantidad,
                                                    'Planificacion.cant_miercoles' => $cantidad,
                                                    'Planificacion.cant_jueves' => $cantidad,
                                                    'Planificacion.cant_viernes' => $cantidad);

                    $data = $this->Planificacion->find('all', array('conditions' => $condiciones, 'order' => 'Planificacion.codigo'));
                    $this->set('data', $data);
                }
            } else
		$this->_principal_buscador_reporte('Planificacion', $busq);
        } else {
            $data = $this->Planificacion->find('all', array('conditions' => $condiciones, 'order' => 'Planificacion.codigo'));
            $this->set('data', $data);
        }
        $this->set('formato', $formato);
    }

    function relacion($busq = null) {
        $this->permisos_menu_individual('asignacion_de_viajes');
        $this->set('busq', $busq);
        $condiciones['PlanificacionDetalle.id >'] = '0';
        $condiciones['PlanificacionDetalle.estatus >'] = 0;
        $condiciones['Afiliado.estatus >'] = 0;
        $filtros = '';
        if(!empty($this->request->data)){
            $filtros = $this->request->data;
            extract($filtros);
        }
        if(!empty($filtros) && isset($vent_filtro)){
            $this->set('opciones', $this->serializador($filtros, 2));
            if(!empty($planificacion_id))
                $condiciones['PlanificacionDetalle.planificacion_id'] = $planificacion_id;
            if(!empty($ced_rif))
                $condiciones['Afiliado.ced_rif ILIKE'] = "%$ced_rif%";
            if(!empty($nombre))
                $condiciones['Afiliado.nombre ILIKE'] = "%$nombre%";
            if(!empty($cant_solicitada))
                $condiciones['PlanificacionDetalle.cant_solicitada'] = $cant_solicitada;
        }
        $data = $this->PlanificacionDetalle->find('all', array('conditions' => $condiciones, 'order' => 'PlanificacionDetalle.id DESC', 'limit' => MAX_PAGI));
        $mostrar = (count($data) > MAX_PAGI) ? MAX_PAGI : count($data);
        $this->set('data', $data);
        $this->Vista->title("Listado de Asignaci&oacute;n de Viajes Encontrados (Mostrando $mostrar de " . count($data) . " Registros Encontrados)");
        if(isset($vent_filtro))
            $this->Vista->cerrar_ventana($vent_filtro);
    }

    public function relacion_nueva() {
        $this->permisos_accion_individual('asignacion_de_viajes', 'nuevo');
        $listaPlanificaciones = $this->Planificacion->find('list', array('fields' => 'Planificacion.id, Planificacion.codigo', 'conditions' => array('Planificacion.id >' => '0', 'Planificacion.estatus' => 1), 'order' => 'Planificacion.codigo DESC'));
        $this->set('listaPlanificaciones', $listaPlanificaciones);
    }

    public function relacion_guardar() {
        $this->permisos_accion_individual('asignacion_de_viajes', 'nuevo');
        $data = $this->request->data;
        if (!$this->Vista->empyt($data, array())) {
            extract($data);
            $this->PlanificacionDetalle->query('BEGIN WORK');
            $data['PlanificacionDetalle']['planificacion_id'] = $planificacion_id;
            $data['PlanificacionDetalle']['afiliado_id'] = $afiliado_id;
            $data['PlanificacionDetalle']['cant_solicitada'] = $cant_solicitada;
            if ($this->PlanificacionDetalle->save($data)) {
                $this->PlanificacionDetalle->query('COMMIT');
                $this->Vista->mensaje("Guardado Exitosamente", 'EXITO');
                $this->Vista->cerrar_ventana($vent_nuevo);
                //$this->log('imprimir');
            } else {
                $this->PlanificacionDetalle->query('ROLLBACK');
                $this->Vista->mensaje("Ocurrio un error Guardando", 'ERROR', 'codigo');
            }
        } else
            $this->Vista->mensaje("Faltan campos requeridos", 'ERROR');
        $this->relacion();
        $this->render('relacion');
    }

    public function relacion_modificar($id = null) {
        $this->permisos_opcion_individual('asignacion_de_viajes', 'estatus', 'modificar');
        $data = $this->request->data;
        if (!empty($data)) {
            if (!$this->Vista->empyt($data, array())) {
                extract($data);
                $id = $this->Interfaz->id($id_detalle);
                $this->PlanificacionDetalle->query('BEGIN WORK');
                $data['PlanificacionDetalle']['id'] = $id;
                $data['PlanificacionDetalle']['planificacion_id'] = $planificacion_id;
                $data['PlanificacionDetalle']['cant_solicitada'] = $cant_solicitada;

                if ($this->PlanificacionDetalle->save($data)) {
                    $this->PlanificacionDetalle->query('COMMIT');
                    $this->Vista->mensaje("Guardado Exitosamente", 'EXITO');
                    $this->Vista->cerrar_ventana($vent_nuevo);
                    //$this->log('imprimir');
                } else {
                    $this->PlanificacionDetalle->query('ROLLBACK');
                    $this->Vista->mensaje("Ocurrio un error Guardando", 'ERROR', 'codigo');
                }
            } else
                $this->Vista->mensaje("Faltan campos requeridos", 'ERROR');
            $this->relacion();
            $this->render('relacion');
        } else {
            $id = $this->Interfaz->id($id);
            if (is_numeric($id)) {
                $resultado = $this->PlanificacionDetalle->find('first', array('conditions' => array('PlanificacionDetalle.id' => $id)));
                $this->set('data', $resultado);
                $listaPlanificaciones = $this->Planificacion->find('list', array('fields' => 'Planificacion.id, Planificacion.codigo', 'conditions' => array('Planificacion.id >' => '0', 'Planificacion.estatus' => 1), 'order' => 'Planificacion.codigo DESC'));
                $this->set('listaPlanificaciones', $listaPlanificaciones);
            } else {
                $this->Vista->mensaje("Relaci&oacute;n Inv&aacute;lida", 'ERROR');
                $this->render("../" . PRINCIPAL . "/mensajes");
            }
        }
    }

    public function relacion_eliminar($id = null) {
        $this->permisos_opcion_individual('asignacion_de_viajes', 'estatus', 'eliminar');
        $id = $this->Interfaz->id($id);
        if (is_numeric($id)) {
            //FALTA VALIDAR QUE SI TIENE VIAJES REALIZADOS, NO PUEDA ELIMINAR
            //$total = $this->PlanificacionDetalle->find('first', array('conditions' => array("PlanificacionDetalle.id" => $id)));
            $this->PlanificacionDetalle->query('BEGIN WORK');
            $data['PlanificacionDetalle']['id'] = $id;
            $data['PlanificacionDetalle']['estatus'] = 0;
            if ($this->PlanificacionDetalle->save($data)) {
                $this->PlanificacionDetalle->query('COMMIT');
                $this->Vista->mensaje("Eliminado Exitosamente", 'EXITO');
                //$this->log('imprimir');
            } else {
                $this->PlanificacionDetalle->query('ROLLBACK');
                $this->Vista->mensaje("Ocurrio un error Eliminando", 'ERROR');
            }
        } else {
            $this->Vista->mensaje("Relaci&oacute;n Inv&aacute;lida", 'ERROR');
            $this->render("../" . PRINCIPAL . "/mensajes");
        }
        $this->relacion();
        $this->render('relacion');
    }
    
    public function relacion_filtro() {
        $this->permisos_accion_individual('productos', 'filtro');
        $listaPlanificaciones = $this->Planificacion->find('list', array('fields' => 'Planificacion.id, Planificacion.codigo', 'conditions' => array('Planificacion.id >' => '0', 'Planificacion.estatus' => 1), 'order' => 'Planificacion.codigo DESC'));
        $this->set('listaPlanificaciones', $listaPlanificaciones);
    }
    
    public function relacion_reporte_excel($formato = 1, $b = 1, $busq = null, $id = null){
        $condiciones['PlanificacionDetalle.id >'] = '0';
        $condiciones['PlanificacionDetalle.estatus >'] = 0;
        $busq = (strpos($busq, 'menuadmin') === false) ? $busq : '';
        if(!empty($id))
            $id = $this->Interfaz->id($id);
        if(!empty($busq)){
            if($b == 2){
                $dataSerializada = $this->serializador($busq, 1); //1 convierte la cadena serializada en un arreglo
                if(is_array($dataSerializada)){
                    extract($dataSerializada);
                    if(!empty($planificacion_id))
                        $condiciones['PlanificacionDetalle.planificacion_id'] = $planificacion_id;
                    if(!empty($ced_rif))
                        $condiciones['Afiliado.ced_rif ILIKE'] = "%$ced_rif%";
                    if(!empty($nombre))
                        $condiciones['Afiliado.nombre ILIKE'] = "%$nombre%";
                    if(!empty($cant_solicitada))
                        $condiciones['PlanificacionDetalle.cant_solicitada'] = $cant_solicitada;

                    $data = $this->PlanificacionDetalle->find('all', array('conditions' => $condiciones, 'order' => 'PlanificacionDetalle.id DESC'));
                }
            } else
		$data = $this->_principal_buscador_reporte('PlanificacionDetalle', $busq);
            
        } elseif (!empty($id)) {
            if (is_numeric($id)) {
                $condiciones['PlanificacionDetalle.id'] = $id;
                $data[0] = $this->PlanificacionDetalle->find('first', array('conditions' => $condiciones, 'order' => 'PlanificacionDetalle.id DESC'));
                $viajes[$id] = $this->Viaje->find('all', array('conditions' => array('Viaje.planificacion_detalle_id' => $id, 'Viaje.estatus >' => 0), 'order' => 'PlanificacionDetalle.id DESC'));
            }
            else
                echo "ESTAS INTENTANDO VIOLAR LA SEGURIDAD AGROPATRIA";
        }else
            $data = $this->PlanificacionDetalle->find('all', array('conditions' => $condiciones, 'order' => 'PlanificacionDetalle.id DESC'));
        if(empty($id)){
            $viajes = array();
            foreach($data as $valor){
                $viajes[$valor['PlanificacionDetalle']['id']] = $this->Viaje->find('all', array('conditions' => array('Viaje.planificacion_detalle_id' => $valor['PlanificacionDetalle']['id'], 'Viaje.estatus >' => 0), 'order' => 'PlanificacionDetalle.id DESC'));
            }
        }
        $this->set('data', $data);
        $this->set('viajes', $viajes);
        $this->set('formato', $formato);
    }

    public function viaje($id = null) {
        $id = $this->Interfaz->id($id);
        if (is_numeric($id)) {
            $resultado = $this->PlanificacionDetalle->find('first', array('conditions' => array('PlanificacionDetalle.id' => $id)));
            $this->set('data', $resultado);
            $listaOrigenes = $this->Almacen->find('list', array('fields' => 'Almacen.id, Almacen.nombre', 'conditions' => array('Almacen.estatus' => 1, 'Almacen.tipo IN' => array(1, 3)), 'order' => 'Almacen.tipo, Almacen.nombre'));
            $this->set('listaOrigenes', $listaOrigenes);
            $listaDestinos = $this->Almacen->find('list', array('fields' => 'Almacen.id, Almacen.nombre', 'conditions' => array('Almacen.estatus' => 1, 'Almacen.tipo IN' => array(2, 3)), 'order' => 'Almacen.tipo, Almacen.nombre'));
            $this->set('listaDestinos', $listaDestinos);
            $listaProductos = $this->Producto->find('list', array('fields' => 'Producto.id, Producto.descripcion', 'conditions' => array('Producto.estatus' => 1), 'order' => 'Producto.codigo'));
            $this->set('listaProductos', $listaProductos);
            $listaConceptos = $this->Concepto->find('list', array('fields' => 'Concepto.id, Concepto.nombre', 'conditions' => array('Concepto.estatus' => 1,), 'order' => 'Concepto.nombre'));
            $this->set('listaConceptos', $listaConceptos);
        } else {
            $this->Vista->mensaje("Viaje Inv&aacute;lido", 'ERROR');
            $this->render("../" . PRINCIPAL . "/mensajes");
        }
    }
    
    public function viaje_ver($id = null) {
        $this->permisos_accion_individual('asignacion_de_viajes', 'ver');
        $id = $this->Interfaz->id($id);
        if (is_numeric($id)) {
            $resultado = $this->PlanificacionDetalle->find('first', array('conditions' => array('PlanificacionDetalle.id' => $id)));
            $this->set('data', $resultado);
            $viajes = $this->Viaje->find('all', array('conditions' => array('Viaje.planificacion_detalle_id' => $resultado['PlanificacionDetalle']['id'], 'Viaje.estatus >' => 0)));
            $this->set('viajes', $viajes);
        } else {
            $this->Vista->mensaje("Viaje Inv&aacute;lida", 'ERROR');
            $this->render("../" . PRINCIPAL . "/mensajes");
        }
    }

    public function viaje_guardar() {
        $this->permisos_accion_individual('asignacion_de_viajes', 'nuevo');
        $data = $this->request->data;
        if (!$this->Vista->empyt($data, array('observacion', 'chofer', 'chofer_nombre', 'placa', 'concepto_id1', 'monto1', 'descripcion1'))) {
            extract($data);
            $this->Viaje->query('BEGIN WORK');
            
            $idChofer = null;
            if(!empty($chofer) && !empty($chofer_nombre)){
                if(isset($chofer_id) && !empty($chofer_id))
                    $datachofer['Chofer']['id'] = $chofer_id;
                $datachofer['Chofer']['ced_rif'] = $this->Interfaz->mayuscula($chofer);
                $datachofer['Chofer']['nombre'] = $this->Interfaz->mayuscula($chofer_nombre);
                $this->Chofer->save($datachofer);
                $idChofer = $this->Chofer->id;
            }

            $data['Viaje']['guia'] = $guia;
            $data['Viaje']['planificacion_detalle_id'] = $planificacion_detalle_id;
            $data['Viaje']['origen_id'] = $origen_id;
            $data['Viaje']['fecha_carga'] = $this->Utilitario->guar_fecha($fecha_carga);
            $data['Viaje']['destino_id'] = $destino_id;
            $data['Viaje']['producto_id'] = $producto_id;
            $data['Viaje']['peso'] = $peso;
            $data['Viaje']['cant_sacos'] = $cant_sacos;
            $data['Viaje']['precio_ton'] = $this->Interfaz->miles_postgres($precio_ton);
            $data['Viaje']['flete'] = $this->Interfaz->miles_postgres($flete);
            $data['Viaje']['caleta_carga'] = $this->Interfaz->miles_postgres($caleta_carga);
            $data['Viaje']['caleta_descarga'] = $this->Interfaz->miles_postgres($caleta_descarga);
            $data['Viaje']['chofer_id'] = $idChofer;
            if(!empty($placa))
                $data['Viaje']['placa'] = $this->Interfaz->mayuscula($placa);
            $data['Viaje']['transferencia'] = (isset($transferencia)) ? 't' : 'f';
            if(!empty($observacion))
                $data['Viaje']['observacion'] = $this->Interfaz->mayuscula($observacion);
            $this->Viaje->save($data);

            for ($i = 1; $i <= $data['cant']; $i++) {
                if (isset(${"concepto_id$i"}) && !empty(${"concepto_id$i"})) {
                    $asignaciones[$i]['ViajeConcepto']['concepto_id'] = ${"concepto_id$i"};
                    $asignaciones[$i]['ViajeConcepto']['viaje_id'] = $this->Viaje->id;
                }
                if (isset(${"monto$i"}) && !empty(${"monto$i"}))
                    $asignaciones[$i]['ViajeConcepto']['monto'] = $this->Interfaz->miles_postgres(${"monto$i"});
                if (isset(${"descripcion$i"}) && !empty(${"descripcion$i"}))
                    $asignaciones[$i]['ViajeConcepto']['descripcion'] = ${"descripcion$i"};
            }

            $verifica = true;

            if(isset($asignaciones) && !empty($asignaciones)) {
                foreach ($asignaciones as $indice => $valor) {
                    if (!$this->ViajeConcepto->saveAll($valor)) {
                        $verifica = false;
                        break;
                    }
                }
            }
            
            if ($verifica) {
                $this->Viaje->query('COMMIT');
                $this->Vista->mensaje("Guardado Exitosamente", 'EXITO');
                $this->Vista->cerrar_ventana($vent_nuevo);
                //$this->log('imprimir');
            } else {
                $this->Viaje->query('ROLLBACK');
                $this->Vista->mensaje("Ocurrio un error Guardando", 'ERROR', 'codigo');
            }
        } else
            $this->Vista->mensaje("Faltan campos requeridos", 'ERROR');

        $this->relacion();
        $this->render('relacion');
    }
    
    public function viaje_modificar($id = null, $ventana = null) {
        $this->permisos_opcion_individual('asignacion_de_viajes', 'ver', 'modificar');
        $data = $this->request->data;
        if (!empty($data)) {
            //if (!$this->Vista->empyt($data, array())) {
            if (!$this->Vista->empyt($data, array('observacion', 'chofer', 'chofer_nombre', 'placa', 'concepto_id1', 'monto1', 'descripcion1'))) {
                extract($data);
                $id = $this->Interfaz->id($id_viaje);
                $this->Viaje->query('BEGIN WORK');
                
                $idChofer = null;
                if(!empty($chofer) && !empty($chofer_nombre)){
                    if(isset($chofer_id) && !empty($chofer_id))
                        $datachofer['Chofer']['id'] = $chofer_id;
                    $datachofer['Chofer']['ced_rif'] = $this->Interfaz->mayuscula($chofer);
                    $datachofer['Chofer']['nombre'] = $this->Interfaz->mayuscula($chofer_nombre);
                    $this->Chofer->save($datachofer);
                    $idChofer = $this->Chofer->id;
                }
                
                $data['Viaje']['id'] = $id;
                $data['Viaje']['guia'] = $guia;
                $data['Viaje']['origen_id'] = $origen_id;
                $data['Viaje']['fecha_carga'] = $this->Utilitario->guar_fecha($fecha_carga);
                $data['Viaje']['destino_id'] = $destino_id;
                $data['Viaje']['producto_id'] = $producto_id;
                $data['Viaje']['peso'] = $peso;
                $data['Viaje']['cant_sacos'] = $cant_sacos;
                $data['Viaje']['precio_ton'] = $this->Interfaz->miles_postgres($precio_ton);
                $data['Viaje']['flete'] = $this->Interfaz->miles_postgres($flete);
                $data['Viaje']['caleta_carga'] = $this->Interfaz->miles_postgres($caleta_carga);
                $data['Viaje']['caleta_descarga'] = $this->Interfaz->miles_postgres($caleta_descarga);
                $data['Viaje']['chofer_id'] = $idChofer;
                if(!empty($placa))
                    $data['Viaje']['placa'] = $this->Interfaz->mayuscula($placa);
                $data['Viaje']['transferencia'] = (isset($transferencia)) ? 't' : 'f';
                if(!empty($observacion))
                    $data['Viaje']['observacion'] = $this->Interfaz->mayuscula($observacion);
                $this->Viaje->save($data);

                $eliminar = '';
                for ($i = 1; $i <= $data['cant']; $i++) {
                    if (isset(${"id$i"}) && !empty(${"id$i"}))
                        $asignaciones[$i]['ViajeConcepto']['id'] = ${"id$i"};
                    if (isset(${"concepto_id$i"}) && !empty(${"concepto_id$i"})) {
                        $asignaciones[$i]['ViajeConcepto']['concepto_id'] = ${"concepto_id$i"};
                        $asignaciones[$i]['ViajeConcepto']['viaje_id'] = $this->Viaje->id;
                    }
                    if (isset(${"monto$i"}) && !empty(${"monto$i"}))
                        $asignaciones[$i]['ViajeConcepto']['monto'] = $this->Interfaz->miles_postgres(${"monto$i"});
                    if (isset(${"descripcion$i"}) && !empty(${"descripcion$i"}))
                        $asignaciones[$i]['ViajeConcepto']['descripcion'] = ${"descripcion$i"};
                    if (isset(${"eliminar$i"}) && !empty(${"eliminar$i"}))
                        $eliminar .= "${"eliminar$i"},";
                }

                $verifica = true;

                if(isset($asignaciones) && !empty($asignaciones)) {
                    foreach ($asignaciones as $indice => $valor) {
                        if (!$this->ViajeConcepto->saveAll($valor)) {
                            $verifica = false;
                            break;
                        }
                    }
                }
                
                $eliminar = preg_replace("/,$/", "", $eliminar);
                
                if(!empty($eliminar))
                    $this->ViajeConcepto->query("UPDATE viaje_conceptos SET estatus = 0 WHERE id IN ($eliminar)");

                if ($verifica) {
                    $this->Viaje->query('COMMIT');
                    $this->Vista->mensaje("Guardado Exitosamente", 'EXITO');
                    $this->Vista->cerrar_ventana($vent_mod);
                    //$this->log('imprimir');
                } else {
                    $this->Viaje->query('ROLLBACK');
                    $this->Vista->mensaje("Ocurrio un error Guardando", 'ERROR', 'codigo');
                }
            } else
                $this->Vista->mensaje("Faltan campos requeridos", 'ERROR');
            $this->relacion();
            $this->render('relacion');
        } else {
            $id = $this->Interfaz->id($id);
            if (is_numeric($id)) {
                $viaje = $this->Viaje->find('first', array('conditions' => array('Viaje.id' => $id)));
                $this->set('viaje', $viaje);
                $listaOrigenes = $this->Almacen->find('list', array('fields' => 'Almacen.id, Almacen.nombre', 'conditions' => array('Almacen.estatus' => 1, 'Almacen.tipo IN' => array(1, 3)), 'order' => 'Almacen.codigo'));
                $this->set('listaOrigenes', $listaOrigenes);
                $listaDestinos = $this->Almacen->find('list', array('fields' => 'Almacen.id, Almacen.nombre', 'conditions' => array('Almacen.estatus' => 1, 'Almacen.tipo IN' => array(2, 3)), 'order' => 'Almacen.codigo'));
                $this->set('listaDestinos', $listaDestinos);
                $listaProductos = $this->Producto->find('list', array('fields' => 'Producto.id, Producto.descripcion', 'conditions' => array('Producto.estatus' => 1), 'order' => 'Producto.codigo'));
                $this->set('listaProductos', $listaProductos);
                $listaConceptos = $this->Concepto->find('list', array('fields' => 'Concepto.id, Concepto.nombre', 'conditions' => array('Concepto.estatus' => 1,), 'order' => 'Concepto.nombre'));
                $this->set('listaConceptos', $listaConceptos);
                $conceptos = $this->ViajeConcepto->find('all', array('conditions' => array('ViajeConcepto.viaje_id' => $id, 'ViajeConcepto.estatus' => 1)));
                $this->set('conceptos', $conceptos);
                $this->Vista->cerrar_ventana($ventana);
            } else {
                $this->Vista->mensaje("Viaje Inv&aacute;lido", 'ERROR');
                $this->render("../" . PRINCIPAL . "/mensajes");
            }
        }
    }
    
    public function viaje_eliminar($id = null, $vent_nuevo) {
        $this->permisos_opcion_individual('asignacion_de_viajes', 'ver', 'eliminar');
        $id = $this->Interfaz->id($id);
        if (is_numeric($id)) {
            $detalleViaje = $this->Viaje->query("SELECT od.id FROM orden_detalls od WHERE EXISTS (SELECT * FROM viajs v WHERE v.id = od.viaje_id AND v.id = $id)");
            if(empty($detalleViaje)) {
                $this->Viaje->query('BEGIN WORK');
                $data['Viaje']['id'] = $id;
                $data['Viaje']['estatus'] = 0;
                if ($this->Viaje->save($data)) {
                    $this->Viaje->query('COMMIT');
                    $this->Vista->mensaje("Eliminado Exitosamente", 'EXITO');
                    //$this->log('imprimir');
                } else {
                    $this->Viaje->query('ROLLBACK');
                    $this->Vista->mensaje("Ocurrio un error Eliminando", 'ERROR');
                }
                $this->Vista->cerrar_ventana($vent_nuevo);
            } else
                $this->Vista->mensaje("El viaje est&aacute; asignado a una Orden", 'ERROR');
        } else
            $this->Vista->mensaje("Viaje Inv&aacute;lido", 'ERROR');
        $this->render("../" . PRINCIPAL . "/mensajes");
    }

    public function validarCodigo($codigo = null, $id = null) {
        if (isset($codigo)) {
            if (isset($id)) {
                if (!is_numeric($id))
                    $id = $this->Interfaz->id($id);
                $this->Vista->verifica('Planificacion', 'codigo', $codigo, 'codigo', $id);
            } else
                $this->Vista->verifica('Planificacion', 'codigo', $codigo, 'codigo');
        }
        $this->render("../" . PRINCIPAL . "/mensajes");
    }

    function listaEstado() {
        $codigo[1] = 'ACTIVA';
        $codigo[2] = 'INACTIVA';
        return $codigo;
    }

    function buscar_cedrif($id = null, $idPlanificacion = null, $ced_rif = null) {
        $id = (!empty($id)) ? $this->Interfaz->id($id) : 0;
        if (!empty($idPlanificacion) && !empty($ced_rif)) {
            $resultado = $this->Afiliado->find('first', array('conditions' => array('Afiliado.ced_rif' => $this->Interfaz->mayuscula($ced_rif))));
            if (!empty($resultado)) {
                $relacion = $this->PlanificacionDetalle->find('first', array('conditions' => array('PlanificacionDetalle.planificacion_id' => $idPlanificacion, 'PlanificacionDetalle.afiliado_id' => $resultado['Afiliado']['id'])));
                if (!empty($relacion)) {
                    echo "<script type='text/javascript'> document.getElementById('ced_rif').value = ''; </script>";
                    $this->Vista->mensaje("El Afiliado ya posee una Asignaci&oacute;n", 'ERROR');
                    $this->render("../" . PRINCIPAL . "/mensajes");
                }
                $this->set('resultado', $resultado);
            } else
                $this->set('resultado', $resultado);
        } else
            $this->render("../" . PRINCIPAL . "/mensajes");
    }

    function relacionNuevoConcepto($cant = null) {
        $this->set('cant', ++$cant);
        $listaConceptos = $this->Concepto->find('list', array('fields' => 'Concepto.id, Concepto.nombre', 'conditions' => array('Concepto.estatus' => 1,), 'order' => 'Concepto.nombre'));
        $this->set('listaConceptos', $listaConceptos);
    }
    
    function buscarGuia($id = 0, $trans, $guia){
        if(!empty($guia)){
            if(!empty($id))
                $id = $this->Interfaz->id($id);
            $viaje = $this->Viaje->find('first', array('fields' => array('Viaje.guia'), 'conditions' => array('Viaje.id !=' => $id, 'Viaje.guia' => $guia, 'Viaje.transferencia' => 'f')));
            if($trans == 1 && empty($viaje)){
                if(empty($id))
                    echo "<script type='text/javascript'> document.getElementById('guia').value = ''; </script>";
                else{
                    echo "<script type='text/javascript'> document.getElementById('transferencia').value = 0; document.getElementById('transferencia').checked = false; document.getElementById('guia').value = $guia; </script>";
                }
                $this->Vista->mensaje("No hay viaje asociado a ese Nro de gu&iacute;a", 'ERROR');
            }elseif($trans == 0 && !empty($viaje)){
                if(empty($id))
                    echo "<script type='text/javascript'> document.getElementById('guia').value = ''; </script>";
                else
                    echo "<script type='text/javascript'> document.getElementById('guia').value = $guia; </script>";
                $this->Vista->mensaje("Nro de gu&iacute;a duplicado", 'ERROR');
            }
        }
        $this->render("../" . PRINCIPAL . "/mensajes");
    }

}
